package net.zjitc.dao;

import net.zjitc.utils.db.C3P0Utils;
import org.apache.commons.dbutils.QueryRunner;

import java.sql.Connection;
import java.sql.SQLException;

/**
 * Created by Administrator on 2017/12/13.
 */
public class TransationTest {
    //事务操作数据库
    public static void main(String[] args) {
        /**
         * 1. 获得数据库的连接
         * 2. 通过此连接对数据库进行操作
         * 3. 关闭连接
         */

        //1. 获得数据库的连接,通过数据库连接池获得连接
        Connection conn  = null;
        QueryRunner runner = new QueryRunner() ;//C3P0Utils.getDataSource()连接池作为参数，以后执行sql语句的时候，自动从连接池中获得连接
        try {
             conn = C3P0Utils.getConnection();    /**   从开启事物 到执行sql语句 到回滚 和关闭连接  所使用的是同一个连接对象conn */
             //DBUtils工具操作
            conn.setAutoCommit(false); //设置成手动提交
            conn.setSavepoint();
            String sql1 = "UPDATE account SET money = money-100 WHERE uname='a'";
            String sql2 = "UPDATE account SET money = money+100 WHERE uname='bbbb'";
            runner.update(conn,sql1);

            int count = runner.update(conn,sql2); //返回值可以判断是否更新成功
            if (count==0){   // 如果bbb没有增加成功，则回滚
                ///conn.rollback();
            }
            conn.commit(); //手动提交
            conn.close(); //关闭连接

        } catch (SQLException e) {
            try {
               conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }
    }
}
